package repositorios;

import interfaceRepositorio.IRepositorioIdentidade;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;

import entidades.Identidade;
import excecoes.FalhaPersistenciaException;

public class RepositorioIdentidade extends RepositorioAbstrato implements IRepositorioIdentidade {

	private String cadastraStm = "INSERT INTO TBIDENTIDADE (TBServidor_cpf, numero, " +
			"orgaoExpeditor, dataExpedicao, uf) VALUES (?, ?, ?, ?, ?)";

	private String consultaStm = "SELECT * FROM TBIDENTIDADE WHERE TBServidor_cpf = ?";

	private String atualizaStm = "UPDATE TBIDENTIDADE SET numero = ?, orgaoExpeditor = ?, " +
			"dataExpedicao = ?, uf = ? WHERE TBServidor_cpf = ?";

	/**
	 * Construtor
	 */
	public RepositorioIdentidade() {
		super();
	}

	/**
	 * Cadastrar identidade
	 * 
	 * @param identidade
	 * @throws FalhaPersistenciaException
	 * @throws SQLException
	 */
	public void cadastrar(Identidade identidade, String cpfServidor)
			throws FalhaPersistenciaException, SQLException {

		Connection conn = encontrarConexao();
		PreparedStatement stm = conn.prepareStatement(cadastraStm);
		
		stm.setString(1, cpfServidor);
		stm.setString(2, identidade.getNumero());
		stm.setString(3, identidade.getOrgaoExpedidor());
		if(identidade.getDataExpedicao()!= null)
			stm.setDate(4, new java.sql.Date(identidade.getDataExpedicao().getTime()));
		else
			stm.setNull(4, Types.DATE);
		stm.setString(5, identidade.getUf());

		stm.execute();
		stm.close();
				
	}

	/**
	 * Consultar identidade
	 * 
	 * @param cpfServidor
	 * @return
	 * @throws FalhaPersistenciaException
	 * @throws SQLException
	 */
	public Identidade consultar(String cpfServidor)
			throws FalhaPersistenciaException, SQLException {

		Identidade identidade = null;

		Connection conn = encontrarConexao();
		PreparedStatement stm = conn.prepareStatement(consultaStm);

		stm.setString(1, cpfServidor);
		ResultSet result = stm.executeQuery();

		if (result.next()) {
			identidade = new Identidade();
			
			identidade.setNumero(result.getString("numero"));
			identidade.setOrgaoExpedidor(result.getString("orgaoExpeditor"));
			identidade.setDataExpedicao(result.getDate("dataExpedicao"));
			identidade.setUf(result.getString("uf"));
		}		
		stm.close();
		if(result!=null){
			result.close();
		}

		return identidade;
	}

	/**
	 * Atualizar identidade.
	 * 
	 * @param identidade
	 * @throws FalhaPersistenciaException
	 * @throws SQLException
	 */
	public void atualizar(Identidade identidade, String cpfServidor)
			throws FalhaPersistenciaException, SQLException {

		Connection conn = encontrarConexao();
		PreparedStatement stm = conn.prepareStatement(atualizaStm);

		

		stm.setString(1, identidade.getNumero());
		stm.setString(2, identidade.getOrgaoExpedidor());
		if(identidade.getDataExpedicao() != null){
			java.sql.Date data = new java.sql.Date(identidade.getDataExpedicao().getTime());
			stm.setDate(3, data);
		}
		else{
			stm.setNull(3, Types.DATE);
		}		
		stm.setString(4, identidade.getUf());
		stm.setString(5, cpfServidor);

		stm.execute();	
		stm.close();
		
	}

	/*public static void main(String[] args) {
		RepositorioIdentidade r = new RepositorioIdentidade();
		
		Calendar c = Calendar.getInstance();
		c.set(2007, 10, 10);
		
		Identidade id = new Identidade();
		id.setNumero("1245");
		id.setCpfServidor("cpf");
		id.setOrgaoExpedidor("SDS");
		id.setDataExpedicao(c.getTime());
		id.setUf("PE");

		try {
			r.cadastrar(id);

			Identidade id2 = r.consultar("cpf");

			c.set(2005, 5, 5);

			id2.setNumero("1234");
			id2.setOrgaoExpedidor("SSP");
			id2.setDataExpedicao(c.getTime());
			id2.setUf("MA");
			r.atualizar(id2);

		} catch (FalhaPersistenciaException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}*/
}
